package com.doit.spark.day04

import com.doit.spark.day01.utils.SparkUtil

/**
 * @DATE 2022/1/6/9:10
 * @Author MDK
 * @Version 2021.2.2
 *
 * 行动算子触发执行数据运算
 * */
object C01_行动算子 {
  def main(args: Array[String]): Unit = {
    System.setProperty("HADOOP_USER_NAME","root")
    val sc = SparkUtil.getSc
    val rdd = sc.makeRDD(List[Int](1, 2, 3, 4, 5),2)
    val rdd2 = rdd.map(_ * 10)
    val rdd3 = rdd2.map(e=>{
      println("map.......")
      e * 10
    })
    //1.获取两个元素
    rdd3.glom().map(_.toList).foreach(println)
    println("----------------------------------")
    val arr = rdd3.take(2)
    println(arr.toList)

    //2.将RDD对应的数据收集到Driver端  封装在本地集合中  数据加载到Driver端的内存中
    //执行collect方法时  仍然执行take方法 两个行动算子触发源头的两次迭代  中间计算过程执行两次
    val arr2 = rdd3.collect()
    println(arr2.toList)
    //3.获取最高的前n部记录top

    //默认排序的前n条数据takeordered

    //将结果输出到控制台foreach

    //foreachPartition每个分区执行一次  一个分区调用一次函数

    //将RDD处理后的结果保存  以分区为文件单位

    //将HDFS配置文件放在本项目资源路径下
    rdd3.saveAsTextFile("hdfs://linux01:8020/data/actions/out1")
    //返回处理的数据条数 count
  }
}
